/*
 * initvar.c
 */
#include "spec.h"
#include "vardecl.h"
#include "funcdecl.h"
#include "adp.h"
#include "adpcm.h"

/****************************************
  variable decralations
****************************************/
struct PCMINFO pInfo[MAX_PCM_NUMBER];

zero struct KEYDATA Pad00, Pad10; /* パッドデータ保存用 */
zero int playmode;		/* 1P vs COM / 1P vs 2Pのどちらを選択したか */
     int oldplaymode = VSCOM;   /* 以前に選択されたゲームモード */
zero int round;			/* 現在のラウンド数 */
zero int whichFall;		/* どっちが落ちたか(PLAYER1/PLAYER2) */
/* コアが破壊されたかどうか FALSE..まだ TRUE..破壊済み */
zero int destroy[CORE_MAX]; 
zero int destroyBoss;		/* ボスが破壊されたどうか */
int backpos1,backpos2;	/* 背景スクロール時の位置 */

/* ファイル読み込みのための一時バッファ */
unsigned short filereadbuf[262144 / 2];

/* フォントバッファ */
unsigned short fontbuf[131072 / 2];

/* 機体位置 */
float Locate[PLAYER_MAX][3];

/* 地面オブジェクト */
object Ground[GROUND_MAX];
Material groundMaterial;
zero fix187 GroundScale;

/* 地面位置初期値 */
fix187 OrigGroundLoc[GROUND_MAX][3] = {
  {-0xe0, 0xe0, 0}, {-0xa0, 0xe0, 0}, {-0x60, 0xe0, 0}, {-0x20, 0xe0, 0},
  {0x20, 0xe0, 0},  {0x60, 0xe0, 0},  {0xa0, 0xe0, 0},  {0xe0, 0xe0, 0},

  {-0xe0, 0xa0, 0}, {-0xa0, 0xa0, 0}, {-0x60, 0xa0, 0}, {-0x20, 0xa0, 0},
  {0x20, 0xa0, 0},  {0x60, 0xa0, 0},  {0xa0, 0xa0, 0},  {0xe0, 0xa0, 0},

  {-0xe0, 0x60, 0}, {-0xa0, 0x60, 0}, {-0x60, 0x60, 0}, {-0x20, 0x60, 0},
  {0x20, 0x60, 0},  {0x60, 0x60, 0},  {0xa0, 0x60, 0},  {0xe0, 0x60, 0},

  {-0xe0, 0x20, 0}, {-0xa0, 0x20, 0}, {-0x60, 0x20, 0}, {-0x20, 0x20, 0},
  {0x20, 0x20, 0},  {0x60, 0x20, 0},  {0xa0, 0x20, 0},  {0xe0, 0x20, 0},

  {-0xe0, -0x20, 0},{-0xa0, -0x20, 0},{-0x60, -0x20, 0},{-0x20, -0x20, 0},
  {0x20, -0x20, 0}, {0x60, -0x20, 0}, {0xa0, -0x20, 0}, {0xe0, -0x20, 0},

  {-0xe0, -0x60, 0},{-0xa0, -0x60, 0},{-0x60, -0x60, 0},{-0x20, -0x60, 0},
  {0x20, -0x60, 0}, {0x60, -0x60, 0}, {0xa0, -0x60, 0}, {0xe0, -0x60, 0},

  {-0xe0, -0xa0, 0},{-0xa0, -0xa0, 0},{-0x60, -0xa0, 0},{-0x20, -0xa0, 0},
  {0x20, -0xa0, 0}, {0x60, -0xa0, 0}, {0xa0, -0xa0, 0}, {0xe0, -0xa0, 0},

  {-0xe0, -0xe0, 0},{-0xa0, -0xe0, 0},{-0x60, -0xe0, 0},{-0x20, -0xe0, 0},
  {0x20, -0xe0, 0}, {0x60, -0xe0, 0}, {0xa0, -0xe0, 0}, {0xe0, -0xe0, 0},
};
/* 地面位置 */
fix187 GroundLoc[GROUND_MAX][3];
/* 地面端の座標 */
zero float GroundEdgeLoc;

machine Machine[PLAYER_MAX];
Material aMaterial[PLAYER_MAX];

/* 1P/2P 機体選択用 */
zero int machPlayer1;
zero int machPlayer2;

machtype MachineType[MACHINE_MAX] = {
  {
    NULL,			/* obj */
    0,				/* width */
    0,				/* height */
    {0},			/* AccTable */
    {0},			/* EngBrakeTable */
    {0},			/* BrakeTable */
    10,				/* Handling */
    1,				/* Bounce */
  }, /* MT_DWARF */
  {NULL, 0, 0, {0}, {0}, {0}, 10, 1}, /* MT_ELF */
  {NULL, 0, 0, {0}, {0}, {0}, 10, 1}, /* MT_BOSS */
  {NULL, 0, 0, {0}, {0}, {0}, 10, 1}, /* MT_HUMAN1 */
  {NULL, 0, 0, {0}, {0}, {0}, 10, 1}, /* MT_HUMAN2 */
};

/* 機体選択時パラメータイメージ */
/* 実際に作成したテーブルのイメージに合うような数をつけます */
/* 名前には半角で１０文字全角で５文字までかけます。 */
machimage MachineImage[MACHINE_MAX] = {
/* {"Name",Acc,Brk,Hnd,Wgt} */
  {"GAMMAWEEN", 2, 2, 2, 3},
  {"JUDASFIGHT", 5, 4, 3, 1},
  {"GIGADETH", 4, 1, 2, 5},
  {"DIZZY BOSS", 1, 1, 1, 1},
  {"PLAYER", 1, 1, 1, 1},
  {"PLAYER", 1, 1, 1, 1},
};

/* 機体パラメータ設定関数 */
pfunc_t parfunc[MACHINE_MAX] = {
  NormalUnit,			/* 1P vs COM 時の自機 */
  LightUnit,			/* round 1 */
  HeavyUnit,			/* round 2 */
  BossUnit,			/* round 3 */
  NormalUnit,			/* 1P vs 2P 時の 1P機 */
  NormalUnit,			/* 1P vs 2P 時の 2P機 */
};

/* 機体操作関数 */
mfunc_t manfunc[MACHINE_MAX] = {
  HumanMain,			/* MT_HUMAN */
  DwarfMain,			/* MT_DWARF */
  ElfMain,			/* MT_ELF */
  BossMain,			/* MT_BOSS */
  Human1Main,			/* 1P */
  Human2Main,			/* 2P */
};

/* 各車の色  I5C4 color */
/* 上位８ビットは明るさ 下位８ビットはカラーコード */
/* カラーコードはそれぞれ以下のようになっています  */
/* 0 : 透明
 * 1 : 白
 * 2 : 黄色
 * 3 : ピンクっぽい色
 * 4 : 水色
 * 5 : 赤
 * 6 : 緑
 * 7 : 青
 * 8 : オレンジっぽい色
 * 9 : オレンジっぽい色その２
 * a : 黄緑
 * b : 青緑
 * c : 紫
 * d : うすい青
 * e : やまぶき色
 * f : 茶色っぽい色
 */
int CarColor[MACHINE_MAX] = {
  0x1405,         /* MT_HUMAN */
  0x0801,         /* MT_DWARF */
  0x0801,         /* MT_ELF */
  0x0801,         /* MT_BOSS */
  0x1405,         /* 1P */
  0x1405,         /* 2P */
};

/* 背景データファイル名 */
char *backname[] = {
  "dat/back/bg1.bin",
  "dat/back/bg2.bin",
  "dat/back/bg3.bin",
};

/* 地面データファイル名 */
char *grname[] = {
  "dat/gr/stage-b.aid",
  "dat/gr/stage-e.aid",
  "dat/gr/stage-g.aid",
};

/****************************************
  オブジェクトデータ配置
****************************************/
unsigned short grdat1[] = {	/* 地面オブジェクトデータその 1 */
#include "txtflo1.h"
};
unsigned short grdat2[] = {	/* 地面オブジェクトデータその 2 */
#include "txtflo2.h"
};
unsigned short grdat3[] = {	/* 地面オブジェクトデータその 3 */
#include "txtflo3.h"
};
unsigned short bosscore[] = {
#include "cube.h"
};
unsigned long bosscoreLength = sizeof(bosscore) / sizeof(int);
float bosscoreLocate[4][3]; /* ボスコア位置 */

/* 地面データテーブル */
unsigned short *grdatTable[] = {
  grdat1,
  grdat2,
  grdat3,
};
/* 地面データの長さ */
unsigned long grdatLength[3] = {
  sizeof(grdat1) / sizeof(int),
  sizeof(grdat2) / sizeof(int),
  sizeof(grdat3) / sizeof(int),
};
/* 各車の最大値・最小値 当たり判定に使用する */
unsigned short *minmaxTable[] = {
  obj05_minmax,
  obj03_minmax,
  obj04_minmax,
  boss_minmax,
};
